const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router');
const views = require('koa-views');
const send = require('koa-send'); // koa-send 主要是用于更方便的处理静态文件
const { join } = require('path');
const router = new Router()
const port = '9001'
const fsExtra = require('fs-extra')


const pdftk = require('node-pdftk');

const { PDF } = require('./src/cover')

// 注册模板文件，指定相应文件夹
app.use(views(__dirname + '/views', {
  map: {
    html: 'ejs'
  }
}))


app.listen(port, () => {
  console.log(`server is starting at port http://localhost:${port} `)
})

const html_template = 'index.ejs' //模板渲染的入口
let src = `./public/pdf.pdf`;

app
  .use(router.routes())
  .use(router.allowedMethods());

router
  .get('/', async (ctx, next) => {
    await ctx.render(html_template, {
      // 需要注入的参数
      body: 'body'
    })
  })
  .get('/pdf', async (ctx, next) => {
    // 生成 pdf 文件
    const pdfFile = new PDF();
    const { pdf_buffer, pdf_path, browser } = await pdfFile.create();
    // 确保文件存在。如果请求创建的文件位于不存在的目录中，则会创建这些目录。如果该文件已存在，则不进行修改。
    await fsExtra.ensureFile(join(__dirname, pdf_path));
    await pdftk
      .input(pdf_buffer)
      .output(join(__dirname, pdf_path))
      .then(async (buf) => {
        await browser.close();
      })
      .catch(next);
    ctx.attachment(src, {
      type: 'inline' // inline '预览' attachment '附件形式下载'
    })
    await send(ctx, src)
  })
